package com.ysd.twocrm.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ysd.twocrm.entity.Student;
import com.ysd.twocrm.entity.UserRoles;
import com.ysd.twocrm.entity.Users;
import com.ysd.twocrm.mapper.StudentClassMapper;
import com.ysd.twocrm.mapper.StudentMapper;
import com.ysd.twocrm.mapper.UserRolesMapper;
import com.ysd.twocrm.mapper.UsersMapper;
import com.ysd.twocrm.service.StudentService;
import com.ysd.twocrm.utils.MD5Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/student")
public class StudentController {
    @Autowired
    private StudentService studentService;
    @Autowired
    private StudentMapper studentMapper;
    @Autowired
    private StudentClassMapper studentClassMapper;
    @Autowired
    private UsersMapper usersMapper;
    @Autowired
    private UserRolesMapper userRolesMapper;
    /**
     * @Description 多条件分页查询
     * @Author  liusupeng
     * @Date   2020/4/7 22:03
     * @Param   根据班级查、根据姓名模糊查询
     * @Return      返回json格式的layui数据表格要的格式
     * @Exception 无
     *
     */
    @GetMapping()
    public Object getAllStudent(Student s,Integer page){


        return studentService.layuiutis(page,s);
    }
    /*
     *
     * @Description  根据学号来判断学生是否存在
     * @param StudentNo
     * @return string
     * @exception
     * @author liusupeng
     * @date 2020/4/8 10:35
     */
    @GetMapping("/1")
    public String getAllStudentNo(String studentNO){
        Student ifStuNo = studentMapper.getIfStuNo(studentNO);
        if(ifStuNo!=null){
            return "success";
        }
        return "false";
    }


    /**
     * @Description 添加学生 并且为他添加登录信息以及学生角色
     * @Author  liusupeng
     * @Date   2020/4/7 22:25
     * @Param 根据学生的全部信息来添加
     * @Return string
     * @Exception
     *
     */
    @PostMapping
    public String getAddStudents(Student s){


            //将学生信息添加成用户用作登录(密码还是加盐加密)

            Users u=new Users(0,s.getStudentNo(),MD5Utils.kl(MD5Utils.password("123456")),s.getStudentSex(),s.getStudentName(),0,new Date(),null,0,null,null,null,1,0,0,null);

        int insert1 = usersMapper.insert(u);//添加用户信息
        s.setExit1(u.getUserId());//必须要放到添加好的用户下面，然后将他的主键存到学生的备用字段1，用于一对一对应
        int insert = studentMapper.insert(s);

            Integer studentRoleId = userRolesMapper.getAllRoleNameById("学生");//获取学生的角色id
            UserRoles ur=new UserRoles(0,studentRoleId,u.getUserId(),0,0);
            int insert2 = userRolesMapper.insert(ur);//给创建的这个用户设置角色为学生
            if(insert2>0){
                studentClassMapper.exitStudentClassByIdSum(s.getStuClassId());//修改班级人数+1
                return "success";
            }


        return "false";
    }


    /*
     * @Description  对班级的人数进行修改，这里只存session
     * 原因：  在前台学生当点击修改按钮的时候，会先将这个班级的id发送过来，这时这里用session存起来
     * 接下来，只需要在另个页面判断，如果进行了修改的话，则先将原先的班级人数-1，然后在把刚修改传来的班级人数+1
     *
     * @param stuClassId
     * @param session
     * @return java.lang.Object
     * @author liusupeng
     * @date 2020/4/10 12:29
     */
    @GetMapping("/2")
    public Object ifSessionStuClassId(Integer stuClassId, HttpSession session){
             session.setAttribute("sessionStuclassId",stuClassId);
             System.out.println("stuClassId+>"+stuClassId);
        return null;
    }
    /*
     * @Description 先根据学生表主键id倒叙查询数据。会先判断查询的集合是否存在，如果不存在则直接赋值stu-1
     * 通过字符串截取技术来截取stu-后面的数字
     * 然后让这个数字+1，最后在拼接上stu-
     * 然后判断生成的学号是否存在，如果不存在则跳出循环
     * 最后将不存在的数据返回前台
     * @param
     * @return java.lang.Object
     * @author liusupeng
     * @date 2020/5/18 11:38
     */
@GetMapping("/3")
    public Object getAllStunoUnione(){

        QueryWrapper<Student> queryWrapper=new QueryWrapper<>();
        queryWrapper.orderByDesc("studentId");
        List<Student> students = studentMapper.selectList(queryWrapper);
       // System.out.println(students.size());
        String stunosno=null;
       if(students.size()>0){

           for(int i=0;i<students.size();i++){
               String substringsno=students.get(i).getStudentNo();
               try {
                   Integer a=Integer.valueOf(substringsno.substring(4));
                   Integer sno=a+1;
                  // System.out.println(sno);
                   String stuno="stu-";
                   stunosno=stuno+sno;
                   Student ifStuNo = studentMapper.getIfStuNo(stunosno);
                   if(ifStuNo==null){
                   //    System.out.println(stunosno);
                       break;
                   }
               }catch (NumberFormatException e){

               }
           }
       }else{

           stunosno="stu-1";
       }
        return stunosno;

    }

    /*
     *
     *@Description  修改学生，首先会将原先的班级数量-1，在将修改的班级数量+1
     * @param s
     * @return
     * @exception
     * @author liusupeng
     * @date 2020/4/8 9:33
     */
    @PutMapping
    public String getExitStudent(Student s,HttpSession session){
        Integer sessionStuclassId = (Integer)session.getAttribute("sessionStuclassId");
        try {
        System.out.println("session存值"+sessionStuclassId);
            int i = studentMapper.updateById(s);
            if(i>0){
                studentClassMapper.exitStudentClassByIdOutSum(sessionStuclassId);//先将原先的班级数量-1
                studentClassMapper.exitStudentClassByIdSum(s.getStuClassId());//在将修改的班级数量+1
                return "success";
            }else{
                return "false";
            }
        }catch (Exception e){
            return "sqlfalse";
        }

    }

    /*
     * @Description  根据学生id来删除，但是有个前提条件，必须要输入一个密码才能进行删除
     *在删除学生前会首先根据id来查询当前学生的信息，然后他的备用字段1对应的是用户表，所以我们需要根据这个来已删除用户
     * @param studentId:学生id;pwd:进行删除的时候需要输入密码
     * 并且将当前班级的人数减一
     *
     * @return string
     * @exception
     * @author liusupeng
     * @date 2020/4/8 9:26
     */
    @DeleteMapping
    public String delStudents(Integer studentId,String pwd){

        System.out.println(">=="+studentId);
        if(pwd.equals("admin")){
            System.out.println(pwd);
            Student student = studentMapper.selectById(studentId);
            studentClassMapper.exitStudentClassByIdOutSum(student.getStuClassId());
            usersMapper.deleteById(student.getExit1());//删除用户
            userRolesMapper.delUsersRole(student.getExit1());//删除当前用户的角色信息
            Integer integer = studentService.delStudent(studentId);//删除学生


            if(integer>0){
                System.out.println(integer);
                return "success";
            }

        }
        return "false";
    }



}
